#include <iostream>

using namespace std;

//class Test
//{
//public:
//	void print1()			// 成员函数是不占用类对象的内存空间的
//	{
//		cout << "1" << endl;
//	}
//	void print2()
//	{
//		cout << "222" << endl;
//	}
//	void print3()
//	{
//		cout << "3" << endl;
//	}
//};
//int main()
//{
//	//int a = 1;
//	//const char* b = "aaa";
//	//cout << sizeof(Test) << endl;
//	//cout << sizeof(&a) << endl;
//	//cout << sizeof(&b) << endl;  // 指针的大小vs下指定为4字节
//
//	Test c, d;
//	c.print1();
//	d.print1();
//
//	return 0;
//}


class A
{
public:
	void prinf1()
	{
		cout << "void prinf1()" << endl;
	}
	static void printf2(const A& a)
	{
		// static成员函数没有this指针，只能访问静态成员
		cout << "static void printf2(const A& a)" << endl;
		cout << a.num << endl;	// 间接访问非静态成员
		//prinf1();				// 不能访问“非静态成员”
		//num = 5;
	}

	virtual void print3()		// 虚函数，会给类对象增加4字节， 4字节是存放（虚函数表的）
	{
		cout << "virtual void print3()" << endl;
	}
	virtual void print4()		
	{
		cout << "virtual void print4()" << endl;
	}
private:
	int num = 10;
};

int main()
{
	A a;
	//A::prinf1();		// 需要创建类对象，才能调用
	A::printf2(a);		// 无需创建类对象，直接调用

	cout << sizeof(a) << endl;
	cout << endl;
		
	cout << sizeof(char*) << endl;	// 无论何种指针大小是固定的 32位4字节
	cout << sizeof(int*) << endl;
	cout << sizeof(A*) << endl;

	return 0;
}